package com.syx.client.service;

import com.syx.client.utils.DateUtils;
import com.syx.common.Message;
import com.syx.common.MessageType;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Objects;

/**
 * @author 邵一鑫
 * @date 2024/1/14 16:22
 * 该类用于完成文件传输服务
 */
public class FileClientService {

    /**
     * 发送文件
     * @param fromUser
     * @param toUser
     * @param fromPath
     * @param toPath
     */
    public void sendFileToUser(String fromUser, String toUser, String fromPath, String toPath) {
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_FILE); // 设置消息类型
        message.setFromUser(fromUser); // 设置发送人
        message.setToUser(toUser); // 设置接收人
        message.setSrc(fromPath); // 设置源文件路径
        message.setDest(toPath); // 设置文件保存的路径
        message.setSendTime(DateUtils.getCurrentDate()); // 设置发送时间
        // 将文件的字节数组封装进 message
        message.setFileBytes(readFile(fromPath));
        try {
            // 获取对应的 ObjectOutputStream
            ObjectOutputStream oos = new ObjectOutputStream(
                    ManageConnectServerThread.getClientConnectServerThread(fromUser).getSocket().getOutputStream());
            // 写入
            oos.writeObject(message);
            System.out.println(fromPath + " --> " + toPath + " 传输中..."); // d://img --> d://img 传输中...
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取文件成字节数组
     * @param path 读取路径
     * @return 文件的字节数组
     */
    public byte[] readFile(String path) {

        FileInputStream fis = null;
        byte[] fileBytes = null;

        try {
            File file = new File(path);
            if(file.exists() && file.isFile()) {
                fileBytes = new byte[(int) new File(path).length()];
                // 读取文件，存入 fileBytes
                fis = new FileInputStream(path);
                fis.read(fileBytes);
            } else {
                System.out.println("文件不存在");
                fileBytes = new byte[0];
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return fileBytes;
    }
}
